import axios from 'axios';

// 创建axios实例
const api = axios.create({
  baseURL: import.meta.env.VITE_API_URL || '/api',
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json',
    'Accept': 'application/json'
  }
});

// 请求拦截器 - 添加认证令牌等
api.interceptors.request.use(
  config => {
    const token = localStorage.getItem('token');
    if (token) {
      config.headers['Authorization'] = `Bearer ${token}`;
    }
    return config;
  },
  error => {
    return Promise.reject(error);
  }
);

// 响应拦截器 - 处理常见错误
api.interceptors.response.use(
  response => {
    // 确保返回的数据中包含token
    if (response.data && response.data.token) {
      localStorage.setItem('token', response.data.token);
    }
    return response.data;
  },
  error => {
    // 处理401未授权错误
    if (error.response && error.response.status === 401) {
      // 清除token并重定向到登录页
      localStorage.removeItem('token');
      window.location.href = '/login';
    }
    return Promise.reject(error);
  }
);

// 用户认证相关API
export const authApi = {
  /**
   * 用户登录
   * @param {Object} credentials - 登录凭证
   * @param {string} credentials.phone - 手机号
   * @param {string} credentials.password - 密码(可选)
   * @param {string} credentials.verificationCode - 验证码(可选)
   * @param {boolean} credentials.rememberMe - 记住我
   * @returns {Promise} - 返回登录结果
   */
  login(credentials) {
    return api.post('/auth/login', credentials);
  },

  /**
   * 手机验证码登录
   * @param {Object} data - 登录数据
   * @param {string} data.phone - 手机号
   * @param {string} data.verificationCode - 验证码
   * @param {boolean} data.rememberMe - 记住我
   * @returns {Promise} - 返回登录结果
   */
  loginWithCode(data) {
    return api.post('/auth/login/code', data);
  },

  /**
   * 发送登录验证码
   * @param {Object} data - 请求数据
   * @param {string} data.phone - 手机号
   * @returns {Promise} - 返回发送结果
   */
  sendLoginCode(data) {
    return api.post('/auth/send-code', data);
  },

  /**
   * 用户注册
   * @param {Object} userData - 用户注册数据
   * @param {string} userData.phone - 手机号
   * @param {string} userData.password - 密码
   * @param {string} userData.confirmPassword - 确认密码
   * @param {string} userData.verificationCode - 验证码
   * @returns {Promise} - 返回注册结果
   */
  register(userData) {
    return api.post('/auth/register', userData);
  },

  /**
   * 发送注册验证码
   * @param {Object} data - 请求数据
   * @param {string} data.phone - 手机号
   * @returns {Promise} - 返回发送结果
   */
  sendRegisterCode(data) {
    return api.post('/auth/register/send-code', data);
  },

  /**
   * 退出登录
   * @returns {Promise} - 返回退出结果
   */
  logout() {
    return api.post('/auth/logout');
  },

  /**
   * 找回密码 - 发送验证码
   * @param {Object} data - 请求数据
   * @param {string} data.phone - 手机号
   * @returns {Promise} - 返回发送结果
   */
  sendResetPasswordCode(data) {
    return api.post('/auth/reset-password/send-code', data);
  },

  /**
   * 找回密码 - 验证码验证
   * @param {Object} data - 请求数据
   * @param {string} data.phone - 手机号
   * @param {string} data.verificationCode - 验证码
   * @returns {Promise} - 返回验证结果
   */
  verifyResetPasswordCode(data) {
    return api.post('/auth/reset-password/verify-code', data);
  },

  /**
   * 找回密码 - 重置密码
   * @param {Object} data - 请求数据
   * @param {string} data.phone - 手机号
   * @param {string} data.verificationCode - 验证码
   * @param {string} data.newPassword - 新密码
   * @param {string} data.confirmPassword - 确认密码
   * @returns {Promise} - 返回重置结果
   */
  resetPassword(data) {
    return api.post('/auth/reset-password', data);
  }
};

// 用户相关API
export const userApi = {
  /**
   * 获取当前用户信息
   * @returns {Promise} - 返回用户信息
   */
  getCurrentUser() {
    return api.get('/user/profile');
  },

  /**
   * 更新用户信息
   * @param {Object} userData - 用户数据
   * @returns {Promise} - 返回更新结果
   */
  updateProfile(userData) {
    return api.put('/user/profile', userData);
  }
};

export default api;